// Tencent is pleased to support the open source community by making
// 蓝鲸智云 - 监控平台/日志平台 (BlueKing - Monitor/Log) available.
// Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
// Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://opensource.org/licenses/MIT
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
//

package converter

import (
	"github.com/elastic/beats/libbeat/common"

	"github.com/TencentBlueKing/bk-collector/define"
)

type Converter interface {
	Convert(*define.Record) define.Events
}

type EventConverter interface {
	Converter
	ToEvent(int32, common.MapStr) define.Event
	ToDataID(*define.Record) int32
}

func NewCommonConverter() Converter {
	return commonConverter{}
}

type commonConverter struct{}

func (c commonConverter) Convert(record *define.Record) define.Events {
	switch record.RecordType {
	case define.RecordTraces:
		return TracesConverter.Convert(record)
	case define.RecordMetrics:
		return MetricsConverter.Convert(record)
	case define.RecordLogs:
		return LogsConverter.Convert(record)
	}
	return nil
}
